package com.example.behaviorpattern.memento.blackbox;

/**
 * 黑箱备忘录模式专注于在不暴露对象状态细节的前提下，保存和恢复对象的状态。
 * 这种模式尤其适用于当我们需要确保封装性，不希望对象的状态在对象之外被访问或修改的场景。
 * 使用场景包括：
 * 复杂对象的状态需要保存，但是不希望外部对象知道或影响这些状态。
 * 当多个备忘录管理操作需要统一管理但又不想暴露具体实现细节给客户端时。
 * 所需组件：
 * Originator（原发器）：负责创建一个备忘录，用来记录当前时刻它的内部状态，以及使用备忘录恢复内部状态。
 * Memento（备忘录）：备忘录对象，用于存储Originator对象的内部状态，但不会直接暴露给Originator以外的对象。
 * Caretaker（负责人）：负责保存备忘录对象，但不能对备忘录的内容进行操作或检查。
 *
 * @author yaojianfeng
 */
public class BlackBoxMementoTest {
    public static void main(String[] args) {
        //创建原发器
        Originator originator = new Originator();
        //创建负责人
        Caretaker caretaker = new Caretaker();
        // 更新状态 ,并将当前状态保存到备忘录中
        originator.setState("State1");
        System.out.println("Originator State: " + originator.getState());
        caretaker.saveMemento(originator.createMemento());

        originator.setState("State2");
        System.out.println("New State: " + originator.getState());

        // 恢复原发器状态
        originator.restore(caretaker.retrieveMemento());
        System.out.println("Restored State: " + originator.getState());
    }
}